{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T02:11:08.610967Z",
     "start_time": "2018-12-19T02:11:08.382929Z"
    }
   },
   "source": [
    "# Hyperopt 入门指南\n",
    "\n",
    "Hyperopt：是进行超参数优化的一个类库。有了它我们就可以拜托手动调参的烦恼，并且往往能够在相对较短的时间内获取原优于手动调参的最终结果。\n",
    "\n",
    "\n",
    "\n",
    "一般而言，使用hyperopt的方式的过程可以总结为：\n",
    "\n",
    " - 用于最小化的目标函数\n",
    " - 搜索空间\n",
    " - 存储搜索过程中所有点组合以及效果的方法\n",
    " - 要使用的搜索算法\n",
    "\n",
    "## 目标函数\n",
    "### 一个简单的例子\n",
    "\n",
    "这里是一个简单的例子，用来展示函数问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:10:52.316805Z",
     "start_time": "2018-12-19T07:10:51.694743Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x': -2.4988538280500032}\n"
     ]
    }
   ],
   "source": [
    "from hyperopt import fmin, tpe, hp\n",
    "best = fmin(\n",
    "    fn=lambda x: x,\n",
    "    space=hp.uniform('x', -2.5, 2.5),\n",
    "    algo=tpe.suggest,\n",
    "    max_evals=100)\n",
    "print(best)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**我们来分解一下这个例子。**\n",
    "\n",
    "函数fmin首先接受一个函数来最小化，记为fn，在这里用一个匿名函数lambda x: x来指定。该函数可以是任何有效的值返回函数，例如回归中的平均绝对误差。\n",
    "\n",
    "下一个参数指定搜索空间，在本例中，它是0到1之间的连续数字范围，由hp.uniform('x', 0, 1)指定。hp.uniform是一个内置的hyperopt函数，它有三个参数：名称x，范围的下限和上限0和1。\n",
    "\n",
    "algo参数指定搜索算法，本例中tpe表示 tree of Parzen estimators。该主题超出了本文的范围，但有数学背景的读者可以细读[这篇文章](https://arxiv.org/abs/1209.5111)。algo参数也可以设置为hyperopt.random，但是这里我们没有涉及，因为它是众所周知的搜索策略。但在未来的文章中我们可能会涉及。\n",
    "\n",
    "最后，我们指定fmin函数将执行的最大评估次数max_evals。这个fmin函数将返回一个python字典。\n",
    "上述函数的一个输出示例是{'x': 0.0011494865292422545}。\n",
    "\n",
    "以下是该函数的图。红点是我们试图找到的点。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:10:53.367115Z",
     "start_time": "2018-12-19T07:10:52.962011Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "# 为随机数固定一个数值\n",
    "np.random.RandomState(seed=42)\n",
    "\n",
    "plt.rcParams[\"font.sans-serif\"] = ['SimHei']  # 用于正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号\n",
    "\n",
    "x = np.linspace(-2.5, 2.5, 256, endpoint=True)  # 绘制X轴（-2.5,2）的图像\n",
    "\n",
    "f = x  # y值\n",
    "\n",
    "plt.plot(x, f, \"g-\", lw=2.5, label=\"f(x)\")\n",
    "plt.scatter(best['x'], best['x'], 50, color='blue')\n",
    "plt.title('f(x) = x 函数图')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:58.444067Z",
     "start_time": "2018-12-19T01:36:58.247023Z"
    }
   },
   "source": [
    "### 更复杂的例子-单独定义目标函数\n",
    "\n",
    "我们这里展示一个更为复杂的例子——$f(x) = sin^2(x-2)e^{-x^2}$，并且将fn定义为python中的函数。同时这里我们还需要通过负号将最大化问题转化为最小化问题。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:10:54.186945Z",
     "start_time": "2018-12-19T07:10:53.633772Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x': 0.21602283343494763}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from hyperopt import fmin, tpe, hp\n",
    "\n",
    "\n",
    "def fun_change(x):\n",
    "    y = (np.sin(x - 2))**2 * (np.e)**(-x**2)\n",
    "    return -y\n",
    "\n",
    "\n",
    "best = fmin(\n",
    "    fn=fun_change,\n",
    "    space=hp.uniform('x', -2.5, 2.5),\n",
    "    algo=tpe.suggest,\n",
    "    max_evals=100)\n",
    "print(best)\n",
    "\n",
    "x = np.linspace(-2.5, 2.5, 256, endpoint=True)  # 绘制X轴（-2.5,2）的图像\n",
    "\n",
    "f = (np.sin(x - 2))**2 * (np.e)**(-x**2)  # y值\n",
    "\n",
    "plt.plot(x, f, \"g-\", lw=2.5, label=\"f(x)\")\n",
    "plt.scatter(best['x'], -fun_change(best['x']), 50, color='blue')\n",
    "plt.title('$f(x) = sin^2(x-2)e^{-x^2}$函数图')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "使用上面的方法，我们就可以传入更加复杂的函数，或者某个其他类库中单独定义的函数，如sklearn中的SVC，RF，亦或是XGBoost或者LightGBM，并在对该函数进行搜索。不过假如真的使用sklearn中的机器学习模型的话，那就会存在另外一个问题，很明显，一般的机器学习模型都不止一个超参数。那么我们又应该怎么传入更多的超参数呢。\n",
    "\n",
    "(Note：不过假如想要完美的使用xgb或者lgb还存在其他问题，这个我们会在其他文章里详细描述使用方法）\n",
    "\n",
    "\n",
    "## 参数空间\n",
    "\n",
    "### 如何定义\n",
    "想要同时传入两个超参数，我们首先要了解参数空间的概念。在Hyperopt中的参数空间需要使用`hyperopt.hp`下的函数进行定义。\n",
    "\n",
    "hyperopt的hp包含很多用来定义参数空间的函数。之前我们已经使用过其中hp.uniform，该函数是返回位于`[low,hight]`之间的均匀分布的值。除此之外比较常用的还有randint：返回0到参数之间的整数，choice，从列表中选择，该函数可以用于传入字符串参数。\n",
    "\n",
    "常用函数如下：\n",
    " - hp.choice(label, options)\n",
    "\n",
    "\t- 返回传入的列表或者数组其中的一个选项。\n",
    "\n",
    " - hp.randint(label, upper)\n",
    "\n",
    "\t- 返回范围:[0，upper]中的随机整数。\n",
    "\n",
    " - hp.uniform(label, low, high)\n",
    "\n",
    "\t- 返回位于[low,hight]之间的均匀分布的值。\n",
    "\t- 在优化时，这个变量被限制为一个双边区间。\n",
    "    \n",
    " - hp.normal(label, mu, sigma)\n",
    "\n",
    "\t- 返回正态分布的实数值，其平均值为 `mu` ，标准偏差为 `σ`。优化时，这是一个无边界的变量。\n",
    "    \n",
    "除此之外其实还有很多其他方法可以使用。这里不再做更多介绍。详细内容可以参考本人翻译的Hyperopt中文文档。（已通过issues获得授权）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:10:54.355130Z",
     "start_time": "2018-12-19T07:10:54.350455Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'name': 'alice', 'x': 0.5383149551265306, 'y': 0.05463630170554273}\n"
     ]
    }
   ],
   "source": [
    "import hyperopt.pyll.stochastic\n",
    "\n",
    "space = {\n",
    "    'x': hp.uniform('x', 0, 1),\n",
    "    'y': hp.normal('y', 0, 1),\n",
    "    'name': hp.choice('name', ['alice', 'bob']),\n",
    "}\n",
    "\n",
    "print(hyperopt.pyll.stochastic.sample(space))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "### 代码实现与具体实现\n",
    "而对于数个传入的超参数，很明显假设这也是一个函数的话，其极大概率是非凸的，而如贝叶斯优化等现代优化算法则是专门处理此类问题的。在搜索一开始的时候，hyperopt会默认进行随机搜索，但是Hyperopt会在搜索过程中对函数的输出进行预估，然后不断地根据之前的结果，调整搜索空间。\n",
    "\n",
    "**之前说过为了向fmin中传入更多的超参数，我们还可以对参数空间进行扩展，而下面就是一个同时对两个参数进行优化的例子。其使用十分简单**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:11:04.137391Z",
     "start_time": "2018-12-19T07:10:55.380950Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x': 2.498647148053222, 'y': 2.4999021654689324}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def fun_change(space):\n",
    "    f = space['x'] + space['y']\n",
    "    return -f\n",
    "\n",
    "\n",
    "space = {\n",
    "    \"x\": hp.uniform('x', -2.5, 2.5),\n",
    "    \"y\": hp.uniform('y', -2.5, 2.5),\n",
    "}\n",
    "\n",
    "best = fmin(fn=fun_change, space=space, algo=tpe.suggest, max_evals=1000)\n",
    "print(best)\n",
    "\n",
    "x = np.linspace(-2.5, 2.5, 256, endpoint=True)  # 绘制X轴（-2.5,2.5）的图像\n",
    "y = np.linspace(-2.5, 2.5, 256, endpoint=True)  # 绘制X轴（-2.5,2.5）的图像\n",
    "\n",
    "f = x + y  # y值\n",
    "\n",
    "plt.plot(x, f, \"g-\", lw=2.5, label=\"f(x)\")\n",
    "plt.scatter(best['x'], -fun_change(best), 50, color='blue')\n",
    "plt.scatter(best['x'], -fun_change(best), 50, color='red')\n",
    "plt.title('$f(x) = sin^2(x-2)e^{-x^2}$函数图')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "### 与sklearn结合\n",
    "\n",
    "在做到这一步的时候，我们已经可以通过将hyperopt和sklearn结合以获取我们想要的超参数组合。这里我们首先来获取数据集，这里使用的是非常经典的iris数据集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:11:10.815109Z",
     "start_time": "2018-12-19T07:11:09.575346Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   sepal_length  sepal_width  petal_length  petal_width species\n",
      "0           5.1          3.5           1.4          0.2  setosa\n",
      "1           4.9          3.0           1.4          0.2  setosa\n",
      "2           4.7          3.2           1.3          0.2  setosa\n",
      "3           4.6          3.1           1.5          0.2  setosa\n",
      "4           5.0          3.6           1.4          0.2  setosa\n",
      "  species   measurement  value\n",
      "0  setosa  sepal_length    5.1\n",
      "1  setosa  sepal_length    4.9\n",
      "2  setosa  sepal_length    4.7\n",
      "3  setosa  sepal_length    4.6\n",
      "4  setosa  sepal_length    5.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fd81b8bf588>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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BlmdQaZ3BmPqOo7WsFm/W8hpwu6swrEDMXV11Xujvz831+zrdezW9/6GL6NtUOt1HHl3QP3279lIVUfZoOaWwRt1gZuSk4iIiMjJCm46gLP7YLScvHyBfreQ08raow/QUrs9Wp4091rGzY38Hd9vXcOetT/pNsaXmMXSVTcMOglJ64R01j7yNK4T7rWPYVrMO/vjpGZPHdTc0rvebmSNusBNRERE5GR5b76a8Atv4VbWYs6YgLVSQZucXhZc/lP2vfMb2psOkDv+PIpnXBNtK5t3E5Y3gdoDr4Nh4Tph/Mm5jJ9/80lljkzJmszCK37JwS0P0t50kHCgBcP0kJ4/F8cJYrhQMvsjCtqGiQI3EREROW0YSQl4P7h6pLchEje+xCymnf1PPbYZhkHprI9QOusjQ7ZeZtFCMosWDtl8cvLilpzki1/8Ih/96EfZt28fq1at4qGHHorXUiIiIiIiIqe1uN1x++EPfxivqUVERERERM4ocbvjJiIiIiIiIkNDgZuIiIiIiMgop8BNRERERERklFPgJiIiIiIiMsopcBMRERERERnlFLiJiIiIiIiMcgrcRERERERERjkFbiIiIiIiIqOcAjcREREREZFRToGbiIiIiIjIKKfATUREREREZJRT4CYiIiIiIjLKKXATEREREREZ5RS4iYiIiIiIjHIK3EREREREREY5BW4iIiIiIiKjnAI3ERERERHpkxu2R3oLZzzPSG9ARERERERGJ7exheB9f8Utr8DIz8b70csxywpHeltnJN1xExERERGRHoX+/CJueQUAblUdofv+iuu6I7yrM5MCNxERERER6ZFzqDKm7NY1QlvHCO3mzKbATUREREREemROKo0pGwU5GClJI7SbM5vecRMRERERkR55r76AUNjG2bUfoygP74cvHuktnbEUuImIiIiISI+M5ER8N1810tsQFLiJiIiIiMgAucEQ4RfX4B6sxJxYirV6KYbHGultnREUuImIiIiIyICE/vgMzrvbAXB27sdtatHjk8NEyUlERERERKRfruPgvLcjps4+FsRJ/ClwExERERGRfhmmCWkpsXUZaSO0mzOPAjcRERERERkQ7zUXgs8bKfh9eK46f2Q3dAbRO24iIiIiIjIg1uwpmF//B9yjNRhFeRgJ/pHe0hlDgZuIiIiIyCjj1DREzk7Ly8KaUtZjH7etg/C6zbjV9ZgzJmHNmgzBIM6WPWCAOWcqxvt3x3rhhm2crXtwOwNYs6dgJCfGtjsOzra9uC1tWLMmY6SlYCQlYEwsxaltwN6wrc89ytBR4CYiIiIiMorY28sJ3fsoOA4AzrmL8Z7wSKLb0Ezg//0O2jsjfdZswp4xEarrcesaATDy1+D7wk0Yfl+P67i2Q/DnD+IeOAJA+KnX8X/hJozMrvfWQvc+irO9PNL+11fxfe5GzIIc7J37Cf36YbCP7XHlwshjlBI3esdNRERERGQUCb+4Jhq0Adivv4N7LECL9nnrvWjQ9j53e3k0aANwq+qw39vZ6zrOzn3RoA2AlrbIvO+3H6qMBm0AdAawX10f2dOLa6JBG4D95ru4re0Du0A5KQrcRERERERGk1A4tuw6YNuxdeET+vSmr35hu4e6cJ/t7rF298R5XTcm2JShp8BNRERERGQU8ZyzKKZszp+BkZocU2edNRc8VkydUZIPx7+jlpaMNW96r+uY0ydg5GR0Vfi8kXnfn6+sGKO04LhFTTwrFkT2uHJh7Fxzp2GccFSADC3DdV13pDfxvg0bNrBo0aL+O4qIiIiInMacPQext5dj5GdjLZqJYVnd+9TUE37pbdy6RqzpE7DOXgDtndjrtoBpYC2d028w5bZ1YL+9OZKcZPEszNys2PbOAPa6LbjNbVgLpmMW5XWtX34Ie+vePvcog9dbTKTATURERERkDHJb2sDnxfD7cBtbIDkRw9t77kE3GIKOToz0VJyjtZDgwzx2gLYbCEIg2Geg57a0gdejIwDirLeYSFklRURERETGEDcQJPT7xyOJQzweSEmExhZI9OO99iKshTO7jbHXbyX06AvQGQDLjCYWMSaVYs2ZSvip1yAYwpw6Hu//uSomOHODIUJ/eBxn617wevBcvALPBcuG7XolQu+4iYiIiIiMIfbrG7qyPYbDkaANoCNA6KFncTsDMf3d9k5CDz0bCdogJhuku/cQ4b+8CMEQAM6u/YRffjt2vTfeiQRtAKEw4Sdfw6mqG/oLkz4pcBMRERERGUOco7W9NwZCuPXNMVVuXWP3TJV9cI/GBmU9ref2tQeJCwVuIiIiIiJjiDVjYq9tRlY6RkF2bF1RLmSk9j6hzxtTNE+Yv9t6Pi/mpNKBbVaGjN5xExEREREZQ6xFs3BbI9kgSU7EyEjFPXQUIycDzwfOwzBj780YloXvUx8m/OSruHVNuIYBNQ2R99UuXIY5qZTw069HMkcunoVn2dzY9RbMwG1px167CSMpAc+lKzFSkobzkgVllRQRERERERk1lFVSRERERGSMsLeXY7+0Fse2MRwXt6oWvN7II48VVV0dPRYU5kYSlHR0RhKPWCYYBlgm1vL5eK88L3bug0cJ3fc4NLVCShIk+jGCYTDABWhsBY+Jde4SzKllhO5/ItLXccBxI3OPL8J3wxWY2RnI8FDgJiIiIiIyijhVdYTufTQSKHEsmAIIhKC1PbZz2IZDR7vXAYTAfvltjIJsPEvmROYKhQn9/IGuZCUNzdBw3BrvC4H9zBvYz78Zk4UyMokL+w4T/NVD+O+6FcMwTuVyZYCUnEREREREZBRxtpdHg7ahYK/dEv3sHqwcVIbJbkHb8WoacGsbTmFnMhgK3ERERERERhEjL2tI5zMLc7rmHspHG70ejLSUoZtP+qTATURERERkFDFnTMRaNjfyLhmA2c+jiH01Z6ZhHfeOm5GRinXBWQPbSF4W5jm9JA40DLwfuQTD7xvYXHLKlFVSRERERGQUclvaIo9MpiTjHKrESEnCzMkktGMf7vZyjCnjsHIyMXIzceuawHVxm1oxMlIhHAbHwSwp6HFup60T90gVZlkRtHWAz4vb3omRmhR5/NEyMQvzjvXtwD1cBQW5OLv2QVY6nuJ8BW1xoqySIiIiIiJjiJGaHP1sjS+OfvZOnwDTJ+BUVGG/uh6nrQNr3lSsBTMw87Oxdx/A2XMQc1whlPQ8t5mcAFPKcANB7B3l0NqBUZSL8842jKx0zAUzjuubCFPHR/axeHZcrlX6p8BNRERERGSMsbeXE/r1I5EMj0B4y26cnfsxSwsI//nFSB/AOf8svB84t8c5XMcl+Iv/xT0xKyVgvrcT363Xxm3/Mnh6x01EREREZIyxX1sfDdre56zfSviltbH93ngHt5fMkG75oR6DNgBn216c6vqh2awMCQVuIiIiIiJjTU9npxk91BtG78lL+kt60l+7DCsFbiIiIiIiY4y1emm3wMpaPh/PxSti6jznL8Uwe/6V35hQgjGx55fgzPnTMHMyh2azMiT0jpuIiIiIyBhjTSnDuPOT2Gs24ba1Y86dhjVjIoZhYBbn4ew5hFFagDV5XK9zGIaB77brcTbvwm1pxyjNxz1YiZGVgTlr0jBejQxEXAO31157je9+97s4jsN1113Hpz/96XguJyIiIiJyxjBzszCPO6MtWl9aiFlaOKA5DI+FdVwGSSb0koZSRlzcHpW0bZtvfetb/PrXv+bJJ5/kiSeeYM+ePfFaTkRERERE5LQVt8Bt06ZNlJWVUVpais/n44orruDFF1+M13IiIiIiIiKnrbg9KllVVUVBQddJ7fn5+WzatKnfcRs2bIjXlkRERERERMakuAVu7gnnSkDkBcj+LFq0KB7bERERERERGfV6u5EVt0clCwoKOHq060C/qqoq8vLy4rWciIiIiIjIaStugducOXPYv38/hw4dIhgM8uSTT3L++efHazkREREREZHTVtwelfR4PHz961/n1ltvxbZtrr32WqZMmRKv5URERERERE5bcT3H7dxzz+Xcc8+N5xIiIiIiIiKnvbg9KikiIiIiIiJDQ4GbiIiIiIjIKKfATUREREREZJRT4CYiIiIiIjLKKXATEREREREZ5RS4iYiIiIiIjHIK3EREREREREY5BW4iIiIiIiKjnAI3ERERERGRUU6Bm4iIiIiIyCinwE1ERERERGSUU+AmIiIiIiIyyilwExERERERGeUUuImIiIiIiIxyCtxERERERERGOc9Ib+BEGzZsGOktiIiIyP9v796jer7/OIA/u0hb4tQ5IWQS1TklrbQ5rhXthIVsWJv7rDFGCiW3bks2HMTZwjFzYuMshrkdl4Q5ushRziiRS0KUVN/0rb7f1++Pfn2OW5Hh+7U9H399P9f3y0fP7+f76vP5fiIiIr1iICKi6yKIiIiIiIioYbxVkoiIiIiISM+xcSMiIiIiItJzbNyIiIiIiIj0HBs3IiIiIiIiPcfGjYiIiIiISM+xcSMiIiIiItJzbNyIiIiIiIj0HBs3UqSmpuLrr79ucPmOHTsQFRX1ysfdsWMH7ty5o0x7e3ujpKTklY9D9KY8L0vPk52djZiYmGcuq89HWVkZtmzZ8srGJHqdnnyfb0hYWBgOHDjQ4PKxY8ciOzv7VZbGLNFb51Xl6XlWrVqFU6dOPTX/0YykpqYiMzPzlY1JjWPjRjq3c+dOFBUV6boMIr3RrVs3LFiwoNF1ysrK8Ouvv76hioj+GX1+n2eW6G3zpvI0c+ZM9OrVq9F10tLScPbs2ddeC9Ux1nUB1DSVlZUICgrC7du3odVq8c0336Bjx46Ii4tDZWUlLCwssGTJErRu3Rpjx46Fo6MjsrOzUVFRgdjYWLi4uCArKwuxsbGoqqqCqakpYmNj0blz5ybVUVJSgsWLF6OwsBAAEB4eDnd3d8THx6OwsBAFBQUoLCzE+PHjMW7cOADA2rVrsWfPHlhbW8PCwgJOTk5o3749zp8/j9mzZ8PU1BTbtm0DACQmJiI5ORm1tbVYuXIl7OzsXu2BpP88XWbJz88PW7Zsgbm5OXr27Il58+Zh+PDhmDNnDvz9/WFkZISNGzciISEB9+/fR0hICEpKSuDi4gIRAQAsX74c169fx7Bhw9CrVy94enqisrISM2bMQG5uLpycnLBs2TIYGBi87kNJ/0EFBQWYPHkyunfvjr///hu2trZYunQpLl++/FSGMjMzn3qf37BhA5KTk6FWq/H+++8jKiqqyT+rJ0+eRHx8PKqrq2FjY4MlS5bAzMwM3t7eGD58+FPnkJKSEoSEhKC0tBTdunXDiRMnkJSUxCyRzukiT1lZWVi3bh3WrFmDw4cPIzg4GBkZGRARDB48GEeOHEFYWBg8PT3h6+uL48ePIzY2Vvn8Vl/3b7/9BkNDQ+zevRsLFy4EAGRkZGDTpk24e/cu5syZA19f39d+DP8zhN4qBw4ckPnz5yvTZWVlMnr0aCkuLhYRkb1790pYWJiIiIwZM0ZZNy0tTYYMGSIiIuXl5VJTUyMiIn/99ZdMnz5dREROnz4tgYGBDY6dlJQkkZGRIiISHBws6enpIiJy8+ZN8fX1FRGR1atXy+jRo0WtVktxcbF88MEHUl1dLVlZWTJ06FB5+PChlJeXi4+Pj2zYsEGpMysrSxnHy8tLNm/eLCIiiYmJEh4e/k8OGdEz6TJLCxculOTkZMnJyZERI0Yo+/bx8ZGKiorHto+Ojpb4+HgREUlOThZ7e3spLi6WGzduKHXUj+nm5ia3bt0SjUYjo0aNUjJK9KrduHFD7O3tJSMjQ0REwsLCZP369Y1m6NH3+fv37yuvZ8+eLUeOXh1p4gAACvBJREFUHBERkdDQUNm/f3+D49bvp7i4WD7//HNRqVQiIpKQkKDkpKFzSGRkpPz0008iIpKSksIskd7QRZ5qamrEy8tLRETi4uJkxIgRkpGRIampqTJr1qzHtq+qqpJ+/fpJfn6+aLVamTFjhnKOWr16tfJ5rn6bb7/9VjQajVy6dEkGDhz4So4R1eEVt7eMvb09li5dih9++AFeXl5o2bIlcnNzMXHiRACAVquFlZWVsv6QIUMAAB4eHqioqEBZWRlUKhVCQ0Nx7do1GBgYoKampsl1nDp1Cnl5ecp0RUUFKioqAAD9+/eHiYkJLC0tYWlpieLiYpw5cwYDBgyAqakpAMDLy6vR/X/00UcAAGdnZxw6dKjJ9RE9jy6z1KNHD6Snp6Ndu3YICAjA9u3bcefOHbRq1QpmZmaPrZueno41a9YAADw9PdGqVasG9+vi4oK2bdsCABwdHXHz5k306NHjxQ8KURNYW1vD3d0dADB06FAkJCQ0mqFHpaamYsOGDaiqqkJpaSm6du0Kb2/vFx773LlzyMvLQ0BAAACgpqYGrq6uyvJnnUPOnDmjZKlfv37MEumVN50nY2NjvPfee7h8+TKysrIwceJEZGRkQKPRKHXUu3LlCjp06IBOnTop9W3fvr3BfQ8cOBCGhobo0qUL7t2796KHgF4AG7e3jK2tLXbs2IGUlBQsX74cvXv3RteuXZVbDJ/05KVyAwMDrFq1Ch9++CHWrl2LgoIC5VbGptBqtdi2bZvSiD3KxMREeW1kZITa2tom779Zs2YAAENDQ2g0miZvT/Q8usySh4cHtm7dilu3bmHWrFk4fPgwDhw48I8/GD6ZPWaHXqcnM2FmZtZohuqp1WpERkYiKSkJ1tbWiI+Ph1qtbtLYIoLevXtjxYoVz1z+rHOI/P824xfBLNGbpos8ubu74/jx4zA2NkavXr0QFhYGjUaD0NDQ59bXmEfzQ68WH07ylrlz5w7eeecdDBs2DF9++SXOnTuHkpIS5YuhNTU1uHTpkrL+vn37ANTdb2xubg5zc3OUl5ejTZs2AOq+4Poy+vTpg8TERGX6woULja7v5uam3H+tUqlw7NgxZZmZmRlUKtVL1UH0snSZJWtra9y/fx9Xr16FjY0N3NzcsHHjxqd+ywnUNXl79uwBAKSkpODBgwcAmBvSvcLCQiUve/fuRffu3RvM0KM/r/UfKi0sLKBSqXDw4MEmj+3q6orMzExcu3YNAPDw4UPk5+c3uo27uzv2798PoO77ccwS6RNd5MnDwwO//PILXF1dYWlpidLSUuTn56Nr166Prde5c2cUFBTg+vXrSn31mJ83i1fc3jK5ubn4/vvvYWhoCGNjY0RERMDY2BgxMTEoLy+HRqPB+PHjldC1atUKn332mfJABQCYPHkywsLC8PPPP6Nnz54vVcf8+fMRFRUFPz8/aDQa9OjRo9E/FeDi4gJvb28MHToU7du3h7OzM8zNzQEA/v7+WLx48WMPJyF63XSdJRcXF2i1WgB1t06uWLHimY3btGnTEBISAn9/f3h4eKBdu3YA6k7Sbm5u+Pjjj9G3b194enr+g6NB1HR2dnbYuXMnFi1ahE6dOmHs2LHo27fvMzP05Pv8yJEj4efnh/bt26Nbt25NHtvS0hJLlixBcHAwqqurAQBBQUGwtbVtcJvp06cjODgY+/fvh4eHB6ysrNCiRQuYmJgwS6RzushT9+7dce/ePXh4eAAAHBwcYGlp+dTVtebNmyMqKgqBgYGwsLCAu7u70kR6eXlhxowZOHLkiPJwEnp9DKQp9w7QW2Xs2LGYO3fuS50UXweVSgUzMzM8fPgQX3zxBaKjo5UnExHpM33LEpGuFRQUYMqUKfjzzz91XcoLq66uVn5Rc/bsWURERGDXrl26LovorcwT6QavuNEbs2jRIuTl5UGtVsPf359NGxERvTGFhYUICgqCVqtFs2bNEB0dreuSiIiahFfc6ClJSUnYvHnzY/Pc3NywePFiHVVE9HZilohezrRp01BQUPDYvNmzZ6Nv3746qojo7cU8/XuwcSMiIiIiItJzfKokERERERGRnmPjRkREREREpOfYuBEREemhTZs2obi4WNdlEBGRnmDjRkRE9ITa2lpdl4DNmzezcSMiIgX/HAAREb1xDg4OCAoKwuHDh1FaWoqYmBicOnUKJ06cQG1tLVatWgU7OzsAwM6dO7F161ZoNBq0aNECERER6Ny5M3JychAZGYmHDx9CrVZj1KhRmDBhAgBg27Zt2LRpE0xMTKDVarFy5UrY2dnBwcEBmZmZMDMzU+qon3ZwcMCcOXOQkpICd3d3BAUFYf369Th48CA0Gg3atGmD6OhoWFlZIT4+HleuXEFFRQWuXr0KJycnBAYGIi4uDoWFhfDx8UFoaCgAoKioCDExMSgsLIRarcaQIUMwZcoUAIC3tzeGDRuGU6dO4e7du5g0aRLGjBmDH3/8EUVFRZgxYwaaN2+O5cuXo0uXLm/+P4qIiPSHEBERvWH29vaSmJgoIiL79u0TV1dXSU5OFhGRdevWSUhIiIiIpKeny1dffSVqtVpERI4dOyajR48WEZHy8nJlfkVFhQwaNEjy8vJERMTNzU0KCwtFREStVktlZaUybkVFxWN11E/b29tLQkKCsuyPP/6QBQsWiEajERGRLVu2SHBwsIiIrF69Wnx8fKSsrExqa2vFz89PJk2aJGq1WlQqlfTs2VPy8/NFRGTChAmSlpam1BIQECAnT54UEREvLy+Ji4sTEZEbN26Iq6urUo+Xl5fk5OT8wyNNRET/FrziRkREOjFo0CAAgJOTEwDA09MTAODs7IxDhw4BAI4ePYqLFy9i5MiRAAARQVlZGQCgqqoKERERyMnJgYGBAYqKinDx4kXY2dmhZ8+emDdvHgYMGABPT0/Y2Ni8UE3+/v7K66NHj+L8+fPKvPorfvX69OkDc3NzAHVX7hwdHWFiYgITExPY2tri+vXraN26NdLS0lBSUqJsp1KpcPnyZfTu3RsAMHjwYABAhw4d0LJlS9y+fVu52khERFSPjRsREelE8+bNAQCGhoYwMTFR5hsaGirfMRMRfPLJJ5g5c+ZT269YsQJWVlaIi4uDsbExJk2aBLVaDQBYs2YNsrOzcfr0aYwbNw4RERHo378/jIyMIP//86X16z7q3XffVV6LCKZOnYpPP/200foBwMjI6KlpjUYDrVYLAwMD/P7772jWrNkL7Uej0TxzPSIi+m/jw0mIiEhveXt7Y9euXbh9+zaAuqte58+fBwCUl5ejbdu2MDY2Rm5uLjIyMgDUPVjkxo0bcHFxQWBgIHr37o0LFy4AAGxsbJCdnQ0A2LNnz3PH3rp1Kx48eAAAqK6uxsWLF5tUf4sWLeDu7o5169Yp827duoW7d+8+d1szMzOUl5c3aTwiIvr34hU3IiLSWx4eHggKCsLUqVOh0WhQU1MDX19fODs7Y+rUqZg7dy52796Njh07wsPDAwCg1WoRFhaG8vJyGBgYwNraGiEhIQCA8PBwLFq0CFZWVsqtmQ0ZPnw4SktLMWbMGAB1V+ACAgLg6OjYpH/DsmXLsGTJEvj5+QGoa8i+++47WFlZNbrduHHjEB4eDlNTUz6chIiIYCD194wQERERERGRXuKtkkRERERERHqOjRsREREREZGeY+NGRERERESk59i4ERERERER6Tk2bkRERERERHqOjRsREREREZGeY+NGRERERESk5/4HrSzlz7JG5gUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import pandas as pd\n",
    "sns.set(style=\"whitegrid\", palette=\"husl\")\n",
    "\n",
    "iris = sns.load_dataset(\"iris\")\n",
    "print(iris.head())\n",
    "\n",
    "iris = pd.melt(iris, \"species\", var_name=\"measurement\")\n",
    "print(iris.head())\n",
    "\n",
    "f, ax = plt.subplots(1, figsize=(15,10))\n",
    "sns.stripplot(x=\"measurement\", y=\"value\", hue=\"species\", data=iris, jitter=True, edgecolor=\"white\", ax=ax)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T03:49:26.167539Z",
     "start_time": "2018-12-19T03:49:09.751754Z"
    }
   },
   "source": [
    "上面的代码展示了iris数据集，而后边的代码则是Hyperopt对sklearn中分类决策树的调参实例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:10:10.819529Z",
     "start_time": "2018-12-19T08:09:54.542222Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best:\n",
      "{'criterion': 0, 'max_depth': 17, 'max_features': 1, 'normalize': 0, 'scale': 0}\n"
     ]
    }
   ],
   "source": [
    "from sklearn import datasets\n",
    "from sklearn.preprocessing import normalize, scale\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "# 这里的warnings实在太多了，我们加入代码不再让其显示\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "from hyperopt import Trials\n",
    "iris = datasets.load_iris()\n",
    "X = iris.data\n",
    "y = iris.target\n",
    "\n",
    "\n",
    "def hyperopt_model_score_dtree(params):\n",
    "    X_ = X[:]\n",
    "    if 'normalize' in params:\n",
    "        if params['normalize'] == 1:\n",
    "            X_ = normalize(X_)\n",
    "        del params['normalize']\n",
    "\n",
    "    if 'scale' in params:\n",
    "        if params['scale'] == 1:\n",
    "            X_ = scale(X_)\n",
    "        del params['scale']\n",
    "    clf = DecisionTreeClassifier(**params)\n",
    "    return cross_val_score(clf, X_, y).mean()\n",
    "\n",
    "\n",
    "space_dtree = {\n",
    "    'max_depth': hp.choice('max_depth', range(1, 20)),\n",
    "    'max_features': hp.choice('max_features', range(1, 5)),\n",
    "    'criterion': hp.choice('criterion', [\"gini\", \"entropy\"]),\n",
    "    'scale': hp.choice('scale', [0, 1]),\n",
    "    'normalize': hp.choice('normalize', [0, 1])\n",
    "}\n",
    "\n",
    "\n",
    "def fn_dtree(params):\n",
    "    acc = hyperopt_model_score_dtree(params)\n",
    "    return -acc\n",
    "\n",
    "# 为可视化做准备\n",
    "trials = Trials()\n",
    "best = fmin(\n",
    "    fn=fn_dtree, space=space_dtree, algo=tpe.suggest, max_evals=1000, trials=trials)\n",
    "print('best:')\n",
    "print(best)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:10:52.081016Z",
     "start_time": "2018-12-19T08:10:52.059601Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9669117647058822\n"
     ]
    }
   ],
   "source": [
    "params = {'criterion': \"gini\", 'max_depth': 18, 'max_features': 2}\n",
    "clf = DecisionTreeClassifier(**params)\n",
    "print(cross_val_score(clf, X, y).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T03:49:26.908761Z",
     "start_time": "2018-12-19T03:49:26.170833Z"
    }
   },
   "source": [
    "**解析上面的例子**\n",
    "\n",
    "首先最关键的还是最小化的目标函数，我们这里构建的目标函数中测试的是sklearn中的分类决策树，而目标函数返回的结果则是交叉验证的平均损失。\n",
    "\n",
    "然后是参数空间的问题，如之前所写，这里只需要定义一个space然后穿入fmin即可。对于字符串的超参数，我们这里使用`hp.choice`解决该问题，**同时要注意的是：假如构建参数空间使用'hp.choice'函数的，那么在模型中返回的将是传入列表或者数组的index（索引）,而且是从0开始的，在测试最终结果时候一定要注意这一点**。为了检测标准化和归一化时候有用，我们这里额外添加了两个参数\"scale\"和\"normalize\"，而其对与分类决策树的影响则定义于目标函数部分。\n",
    "\n",
    "但是hyperopt进行的参数选择到底是怎么样影响我们的模型的呢？\n",
    "\n",
    "## 可视化\n",
    "\n",
    "目前看，hyperopt对于我们已经是个黑箱。但是我们也可以通过传入`Trials`来获取搜索过程中的结果。而通过可视化该结果，我们也可以对参数和模型的关系有更好地了解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:13:54.541153Z",
     "start_time": "2018-12-19T07:13:53.849751Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIcAAAE/CAYAAADc0KMkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl4E+X2wPFvuqYLpS1bQZYiUMoqBcq+tQgIsi8iKoKoCALuu1z96cXrvSoKohcBERdEBQQVRUHZkR3ZhHJZpFCWFkoXuqZNMr8/QiJppmFaWpKm5/M8POS0J++8M5m3k7yZOaNTFEVBCCGEEEIIIYQQQlRKXq7ugBBCCCGEEEIIIYRwHZkcEkIIIYQQQgghhKjEZHJICCGEEEIIIYQQohKTySEhhBBCCCGEEEKISkwmh4QQQgghhBBCCCEqMZkcEkIIIYQQQgghhKjEZHJIFGvnzp306NGjXNo+e/YsTZs2xWg0lkv7QgghREn98MMPTJgwoUzbvPPOO9m5c2eZtimEKJ05c+bwzDPPuLobQggNxo4dy7Jly4DyOT4LRzI5JG6K+Ph4tm3b5upuCOGWFEXhxRdfJDY2lpEjR7q6O0JUWoMHD+aTTz6xxU2bNuX06dM31OZPP/1Ex44db7RrQgghRKVV9PgsyodMDgkhhIvt3buX33//nU2bNrF8+fIbamvFihWMGTOmjHomROVR1meyypmxQgghKgs55nkGmRxyM/Hx8Xz88ccMGjSINm3a8NJLL5GamspDDz1ETEwM48ePJzMzE4DHHnuMrl270q5dO+69916OHz8OQEFBAUOGDOGLL74AwGQycffdd/PBBx84XXZ+fj4vvPACsbGxDBgwgEOHDtn9PiUlhWnTptGpUyfi4+P5/PPPbb+bM2cOjz32GE888QQxMTEMGzaMo0ePAvDss89y/vx5Jk2aRExMDAsWLLA9b9WqVfTq1YuOHTsyd+7cG9+AQlRA586d45ZbbiEwMNDVXZGDu/BIFy5cYOrUqXTq1ImOHTvy+uuvs2LFCu6++27+9a9/0aFDB+bMmWM3uXrvvfcCMGTIEGJiYli9ejUAGzZsYMiQIbRv3567777bdqwDyzF8/vz5tmO40Wi0O3O2oKCAN954g27dutGtWzfeeOMNCgoKgL8v5f7kk0/o3Lkz3bp149tvv72Zm0kItzR//ny6d+9OTEwM/fr1Y/v27ZhMJj766CNuv/12YmJiGD58OBcuXABgxowZ9OzZk7Zt2zJ8+HD27NlTbNv79+/n7rvvpn379gwePFguARWVUnx8PAsXLmTQoEG0a9eOJ554AoPBAMDSpUvp06cPHTp0YNKkSaSkpNie17RpU7788kv69u1L3759HX4WExPDrFmzOHPmDKNHj6Zt27Y8/vjjtuNeZmYmjzzyCJ06dSI2NpZHHnmE5ORk1T5ee3xesGABMTExtn8tWrTghRdeACArK4uXXnqJbt260b17d9577z1MJlO5bTuPowi3EhcXp4waNUq5dOmSkpycrHTq1EkZOnSocvjwYcVgMChjx45V5syZoyiKoixbtkzJyspSDAaDMmPGDGXw4MG2dv73v/8p7du3V06cOKH897//VUaNGqUYjUany3777beVMWPGKOnp6cr58+eVO++8U+nevbuiKIpiMpmUYcOGKXPmzFEMBoNy5swZJT4+Xtm8ebOiKIry/vvvK82bN1d+/vlnpaCgQPn444+VuLg4paCgwLZev//+u21ZSUlJSlRUlPLyyy8reXl5SkJCgtKiRQvlxIkTZbo9hdAqLi5OWbBggTJw4EDltttuU1588UXl0qVLyoMPPqi0adNGGTdunJKRkaEoiqJMmzZN6dKli9K2bVvlnnvuUY4dO6YoiqIYDAZl8ODByueff64oiqIYjUZl9OjRtjGrZunSpUrLli2V6OhopU2bNsrs2bMVRVGU9evXK4MHD1batWunjB49WklISLA9Z968eUrv3r2VNm3aKP3791fWrl2rKIqinDhxwq6tdu3aKYqiKPfdd5+ydOlS2/O//fZb5e6777bFUVFRyuLFi5U+ffoocXFxtrbGjx+vxMbGKn379lV++uknW/7GjRuV/v37K23atFG6deumfPzxx6Xf8EKUM6PRqAwaNEh54403lJycHCU/P1/ZvXu38u233yrNmjVTPv/8c6WwsFDJy8tTHRuJiYm2+M8//1Q6deqk7N+/XzEajcqKFSuUuLg4xWAwKIpi+TsyePBg5fz580peXp7tZ9bj36xZs5RRo0YpqampyuXLl5XRo0cr7733nqIoirJjxw6lWbNmyqxZs5SCggJl48aNSuvWrW1/d4SojE6ePKn06NFDSU5OVhTF8v7x9OnTtuP1yZMn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JlckTVSbIuak2hQxJ9WmiPmoLkXMI2FzCKCxsZHGxsYpt23dunVK/MADD0y736c+9Smef/75OaQnIvGoNkXMSbUpYk6qTRHzUV2KmIPOjxMRERERERERsTE1h0REREREREREbEzNIRERERERERERG1NzSERERERERETExtQcEhERERERERGxMTWHRERERERERERsTM0hEREREREREREbU3NIRERERERERMTG1BwSEREREREREbExNYdERERERERERGxMzSERERERERERERtTc0hERERERERExMbUHBIRERERERERsTE1h0REREREREREbEzNIRERERERERERG1NzSERERERERETExtQcEhERERERERGxMTWHRERERERERERsTM0hEREREREREREbU3NIRERERERERMTG1BwSEREREREREbExNYdERERERERERGxMzSERERERERERERtTc0hERERERERExMbUHBIRERERERERsTGX0QlkQjgcoa3tOH7/ABUVxTQ0LMHpVB9MROYuHIa2A9DaUUIwDxquBn17ERFJjzARfAyxpwTCDFJHIU4L/y0zQpghfFCyh0HCFFJn6eMVyRrhMBxto+RwKxQFYXmD3vCJ5SXVHGptbeXhhx8mEolwxx13cO+99075/Pe//31ef/11AEZHR+nt7WXv3r0APPfcczz++OMAfPOb3+S2225LZ/4zams7TktLJwBHjpwGoLGxMuOPK/Jxy7batIK2A9CyH7pPu2nZH7utsdrYnMR8VJsiqfExRDtBAm4H7QQBqKcobfs3W20O4SNIOw53gCDtABRRP+f9imQbs9UmR9vgUAvugW441BK7rapx7vsVMbGEzaFwOMz27dvZsWMHXq+XzZs309TUxPLlyye3+c53vjP5/6eeeooDBw4AcObMGR577DH+5V/+BYfDwe23305TUxPz58/PwKGc5/cPxI1FrCAba9MK/L3xYxHVpkjqegjFjefCjLUZoiduLGIHZqxN+vzxYxELSnhuXEdHB0uXLqWiooK8vDw2btzIzp07L7p9c3MzX/jCFwBoa2vj+uuvZ8GCBcyfP5/rr7+e3bt3py/7i6ioKI4bi1hBNtamFVQsih+LqDZFUldKXtx4LsxYm3mUxo1F7MCMtUlJRfxYxIISnjkUCAQoLT3/g8rr9dLR0THjtidOnKCrq4vrrrvu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\n",
      "text/plain": [
       "<Figure size 1440x360 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "parameters = ['max_depth', 'max_features', 'criterion', 'scale',\n",
    "              'normalize']  # decision tree\n",
    "cols = len(parameters)\n",
    "f, axes = plt.subplots(nrows=1, ncols=cols, figsize=(20, 5))\n",
    "cmap = plt.cm.jet\n",
    "for i, val in enumerate(parameters):\n",
    "    xs = np.array([t['misc']['vals'][val] for t in trials.trials]).ravel()\n",
    "    ys = [-t['result']['loss'] for t in trials.trials]\n",
    "    ys = np.array(ys)\n",
    "    axes[i].scatter(\n",
    "        xs,\n",
    "        ys,\n",
    "        s=20,\n",
    "        linewidth=0.01,\n",
    "        alpha=0.5,\n",
    "        c=cmap(float(i) / len(parameters)))\n",
    "    axes[i].set_title(val)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "通过上面的例子我们可以看出scale和normalize在这里基本没有什么影响。而其他参数的影响也可以比较好的看出。这在进行进一步的搜索的时候，将会非常有用。因为我们可以通过图像获得一个更小的参数搜索范围。然后同样的事情，我们再做一次，模型替代为SVM。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:08:41.023828Z",
     "start_time": "2018-12-19T08:00:18.774414Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best:\n",
      "{'C': 3.383042170158757, 'gamma': 2.4082659264264454, 'kernel': 3, 'normalize': 1, 'scale': 0}\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIcAAAE/CAYAAADc0KMkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XmUXHWd///nrX2v3qs6nU53CEsQiATCZgLRKJsYYURHPb9RRx0XXMBxPOroVz2D/hzHnzvozCDi6BnnO6IDjooriIEAJuyBLARCek9Xb9W173V/f9yuSne2DiGQSvr1OCcnuVV3+dyqfFLV77zf749hmqaJiIiIiIiIiIgsSLZjPQARERERERERETl2FBwSEREREREREVnAFBwSEREREREREVnAFBwSEREREREREVnAFBwSEREREREREVnAFBwSEREREREREVnAFBwSEXmJrVu3jgcffPCYjuGmm27iE5/4xDEdg4iIyLGkz0KR48c73vEOfvaznwHwy1/+kve85z3HeEQnPsexHoA0jl/96lf88Ic/ZPfu3fj9fpYvX84HP/hBVq1adayHJiIiIiIiIgvQG9/4Rt74xjce62Gc8BQcEgB++MMfcsstt/BP//RPrFmzBqfTyf33388999yj4JBIAyiXyzgc+idbRERERBqLvqeeGFRWJqRSKb7zne/w+c9/nssuuwyfz4fT6WTdunV86lOfOtbDEzmh7Nq1i3Xr1nHXXXcRi8X46Ec/yoUXXsi6dev48Y9/XN/vpptu4vrrr+cTn/gE55xzDnfeeSc33XQTN9xwA5/85CdZuXIlV111FU899VT9mEOdT0Rg69atXHPNNaxcuZLrr7+ej33sY3zzm98kkUjwgQ98gAsvvJDzzjuPD3zgA4yOjtaPe8c73sE3v/lN3va2t7Fy5Uo++MEPEo/H+Yd/+AfOOeccrr32WoaGhur7n3baafzkJz/hsssuY+XKlXzrW99iYGCAt771rZxzzjnccMMNFItFgHmvLbLQ3XLLLVx88cWsXLmSyy+/nIceeohKpcK//du/8brXvY6VK1fypje9iT179gDwpS99ibVr13LOOefwpje9iUceeeSg537iiSd429vexqpVq3jjG9/Ipk2bXq7bEmkY69at4wc/+AHr16/n3HPP5WMf+xiFQgGA22+/nUsvvZTzzz+fD37wg8Risfpxsz/rLrvssv0eO5qff3fccQdvf/vbAfj+97/PypUr67/OOOMMPv3pTwPWz7Wf+cxnWLNmDRdffDHf/OY3qVQqL9lrd6JRcEh4/PHHKRQKXHrppcd6KCIntK1bt/Le976Xz33uc1x55ZVcd911nHbaadx333386Ec/4kc/+hH3339/ff977rmHK664gkceeYT169cD8Kc//YmrrrqKRx55hHXr1vHFL34RgGq1Ou/5RBayYrHIRz7yEf7qr/6KzZs384Y3vIG7774bsObPm970Ju69917uvfde3G43N95445zjf/Ob3/DVr36V++67j4GBAd72trdx7bXXsnnzZpYtW8Z3v/vdOfvff//93HHHHdx+++3ceuutfO5zn+NrX/saGzZs4Nlnn+Wuu+467GuLLFTPP/88P/nJT/j5z3/O448/zg9+8AO6urr44Q9/yF133cUtt9zCY489xpe//GU8Hg8AZ511Fr/4xS/q8/yGG26o/6A7WywW4wMf+ADXXXcdmzdv5lOf+hTXX389U1NTL/dtihxzv/3tb7n11lu55557eOaZZ7jjjjt46KGH+PrXv863vvUtNm7cSFdXFx//+MfnHHf33Xdz++2385vf/Kb+2Ev9+fe+972Pxx9/nMcff5zf/OY3NDc3c+WVVwLwqU99CofDwR/+8Ad+8Ytf8MADD9T7Fsn8FBwSpqenaW5uViqgyEvokUce4brrruMrX/kKr3nNa3jqqaeYmpriIx/5CC6Xi+7ubv76r/96zofr2Wefzete9zpsNlv9S++5557L2rVrsdvtXH311ezYsQPgsM4nspA9+eSTlMtl3vnOd+J0Ornssss466yzAGhububyyy/H6/USCAS47rrrePjhh+cc/6Y3vYklS5YQDAa55JJL6O7u5lWvehUOh4MrrriCbdu2zdn/fe97H4FAgFNOOYVTTz2V1atX093dXT++tv/hXFtkobLb7RSLRXbt2kWpVGLx4sUsWbKEn/3sZ9xwww2cdNJJGIbB8uXLaW5uBuDqq6+uf699z3veQ7FYZPfu3fud+3//93+55JJLWLt2LTabjdWrV3PmmWeyYcOGl/s2RY65d7zjHUQiEZqamnjNa17D9u3b+dWvfsW1117LGWecgcvl4uMf/zhPPPHEnEzZ97///TQ1NdW/p8LL9/mXz+f58Ic/zDvf+U7Wrl3LxMQE9913H5/5zGfw+Xy0trbyt3/7t/VglMxP0QChqamJeDyuWlGRl9B///d/c95553HhhRcCMDw8zNjY2JyeXpVKZc52NBrd7zxtbW31P3s8HgqFAuVy+bDOJ7KQjY2NEYlEMAyj/lhnZycAuVyOf/7nf+b+++8nkUgAkMlkqFQq2O12YO7cc7vd+83FbDY753qH2t/tdjMxMXHY1xZZqHp6evjMZz7DTTfdxHPPPceaNWv49Kc/zejoKEuWLDngMbfddhs/+9nPGBsbwzAM0uk08Xh8v/1GRkb43e9+x7333lt/rFwuc8EFF7xk9yPSqNrb2+t/9nq9jI2NMT09zRlnnFF/3O/309TURCwWY/HixcDez9HZXq7Pv89+9rMsXbqU97///YA1p8vlMmvWrKnvU61WDzhGOTBFAoSVK1fidru5++67ueKKK471cEROSP/0T//E97//fb785S/zmc98hs7OThYvXswf/vCHgx4z+4fY+RzO+UQWsvb2dmKxGKZp1ufWnj176O7u5rbbbmP37t3cfvvttLe3s337dq655hpM03zJx3Usry1yPFi/fj3r168nnU7z+c9/nq997WtEo1EGBgY49dRT5+z7yCOP8P3vf5//+I//4JRTTsFms3HeeecdcD51dnZy9dVX86UvfenluhWR40pHRwfDw8P17Ww2y/T0NJFIpP7YC/muuq8X8/l3yy23sHv3bv7rv/6r/lg0GsXlcvGXv/xFCQ9HSGVlQjAY5Prrr+fGG2/k7rvvJpfLUSqV2LBhA1/96leP9fBETgh+v59bb72VRx55hK997WusWLGCQCDALbfcQj6fp1KpsHPnTrZs2XJE5z/a5xM50Zx99tnY7Xb+8z//k3K5zN13311v6J7JZHC73YRCIaanp7n55ptftnEdy2uLNLrnn3+ehx56iGKxiMvlwu12Y7fbectb3sK3v/1t+vr6ME2THTt2EI/HyWQy2O12WlpaKJfL3HzzzaTT6QOe+41vfCP33nsv999/P5VKhUKhwKZNm9QQXmTG+vXrueOOO9i+fTvFYpFvfOMbrFixop419GId6effhg0b+PGPf8x3v/vdOeVsHR0drF69mq985Suk02mq1SoDAwNs3rz5qIx3IVBwSAB497vfzac//Wm+973vcdFFF/HqV7+an/zkJ7zu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IiIiIiIiIlLFHFccev7557njjjvYs2cPBw8eLHc6K9q1axf79u1j//793H333eVOZ4HPfvaz3Hjjjbzvfe+bO298fJwPfvCD3H777Xzwgx8kHA6XMcOFlsr3H//xH7nlllvYv38/+/fv57nnnitjhgudO3eO++67j/e85z3s3buXf/7nfwbs/RyvhtPGZqGWeh9WmuXeu5UmHo9zzz338Bu/8Rvs3buXL3/5y+VOqSScNDbt/JkJ+twspWr5zFxpPCYSCT75yU+yZ88e7r33Xvr6+sqSxze+8Q3e+973sm/fPu6//376+/vLkkfGf/3Xf3HllVfyyiuvlC2PH/7wh7z3ve9l7969fPrTny5LHgMDA9x3333cdddd7Nu3r2Tjd6XvOqZp8td//dfs2bOHffv28eqrr5Ykj7WksZlfHhkam5aKGZumgySTSXP37t3mmTNnzHg8bu7bt888efJkudPK6l3vepc5MjJS7jSWdPjwYfPo0aPm3r1758579NFHza997WumaZrm1772NfNv//Zvy5XeRZbK98tf/rL59a9/vYxZLS8UCplHjx41TdM0JyYmzNtvv908efKkrZ/jQjlxbBZqqfdhpVnuvVtp0um0OTk5aZqmaSYSCfOee+4xX3755TJnVVxOG5t2/sw0TX1ullI1fGbmMh6/+c1vmn/1V39lmqZp/uAHPzA/8YlPlCWPl156yZyamjJN0zSffPLJsuVhmtb74Xd/93fNe++91+zp6SlLHqdPnzb3799vjo+Pm6ZpmsPDw2XJ46GHHjKffPJJ0zRN8+TJk+a73vWuoudhmit/1/nv//5v80Mf+pCZTqfNl19+2bznnntKksda0djMPw/T1Nicr1LGpqNmDvX09NDV1cWWLVvweDzs3buXZ599ttxpOdbb3/52/H7/gvOeffZZ7rrrLgDuuusufvzjH5cjtSUtla+dtbe3c8011wDQ2NjI1q1bCYVCtn6OC1VNY9Np78NCLPferTSGYeDz+QBIJpMkk0kMwyhzVsVVTWNzLehzs3Sq4TMzl/H4k5/8hPe///0A3HHHHbz00kuYRd47Jpc8brjhBurr6wG4/vrrGRwcLGoOueYB8Pjjj/PAAw9QV1dX9BxyzePb3/42H/jAB+bGU1tbW1nyMAyDyclJACYmJmhvby96HrDyz47MuDQMg+uvv55IJMLQ0FBJclkLGpv55wEam/NVyth0VHEoFArR0dExFwcCAUf8wvKhD32Iu+++m3/7t38rdyorGhkZmXszt7e3Mzo6WuaMVvbkk0+yb98+PvvZz9p2unlfXx/Hjh3j137t1xz5HK/EqWNTVjb/vVuJUqkU+/fv553vfCfvfOc7K+5xOnFsOukzE/S5WQqV+pmZy3gMhUJs3LgRsLb3bmpqYmxsbM3zmO873/kOt956a1FzyDWP1157jcHBQd71rncV/f7zySMYDHL69Gl++7d/m9/8zd/k+eefL0seH/vYx/j+97/Prbfeyh/+4R/y0EMPFT2PXCzOtaOjw/afLdlobOafh8ZmZY5NRxWHlqrO2v2vvN/61rc4dOgQ//RP/8STTz7Jz3/+83KnVFF+53d+h2eeeYbvfe97tLe388UvfrHcKV0kGo3y8Y9/nL/4i7+gsbGx3OmUhBPHpqysGt67breb733vezz33HP09PRw4sSJcqdUVE4bm/rMLD27f25W8s+dXMbjWozZfO7je9/7HkePHuWBBx4oag655JFOp/mbv/kb/uzP/qzo951PHmD9IaG3t5d/+Zd/4bHHHuOhhx4iEomseR5PPfUU73//+3n++ec5ePAgDz74IOl0uqh55MJpny0r0djMLw+Nzcodm44qDnV0dCyYOhcKhUo2ZatYAoEAYE1x27NnDz09PWXOKLu2tra5qWdDQ0O0traWOaPs1q9fj9vtxuVyce+995ZsMbRCzczM8PGPf5x9+/Zx++23A857jnPhxLEp2S313q1kzc3N/Pqv/zovvPBCuVMpKqeNTad9ZoLzfqbb+XOz0j8zcxmPHR0dnDt3DrDaXScmJmhpaVnzPAB++tOf8tWvfpWvfOUreDyeouaQSx7RaJQTJ07w+7//++zatYtf/vKXfPjDHy76ezaX5yMQCLB7925qa2vZsmULl156KcFgcM3z+M53vsN73vMeAN761rcSj8eLPnslF4tzHRwctPVny0o0NvPLQ2Ozcsemo4pD1113HcFgkLNnz5JIJHjqqafYtWtXudNa1tTU1Fzv4dTUFP/zP//Dtm3bypxVdrt27eK73/0uAN/97nfZvXt3mTPKbn4P5Y9//GNbPb+mafKXf/mXbN26lQ9+8INz5zvtOc6F08amZLfce7fSjI6Ozv11KRaL8dOf/pStW7eWOavictLYdOJnJjjvZ7pdPzer4TMzl/G4a9cuDh06BMDTTz/NDTfcUPTZCbnk8dprr/Hwww/zla98pSRreOSSR1NTEz/72c/4yU9+wk9+8hOuv/56vvKVr3DdddetaR4A7373u/nZz34GWJ8dwWCQLVu2rHkeGzdu5KWXXgLg1KlTxOPxshRMM+PSNE1++ctf0tTU5OjikMZmfnlobFbu2DTMYq+kVWLPPfccX/jCF0ilUhw4cIAPf/jD5U5pWWfPnuWjH/0oYE15e9/73merfD/1qU9x+PBhxsbGaGtr40/+5E9497vfzSc/+UnOnTvHxo0befzxx4teFS/UUvkePnyY119/HYBNmzbxyCOP2ObD6Re/+AUf+MAHuOKKK3C5rDrspz71KbZv327b53g1nDQ2V2Op9+G9995b7rSKarn37m233VbmzIrr9ddf58///M9JpVKYpsmdd97Jxz72sXKnVXROGZt2/8wEfW6WUrV8Zi41Hh9//HGuvfZadu/eTTwe5zOf+QzHjh3D7/fz93//90X/RSeXPP7gD/6AEydOsGHDBsD6xeerX/3qmucx33333ceDDz5Y9F9Ac8nDNE2++MUv8sILL+B2u/njP/5j9u7du+Z5vPHGGzz00ENMTU1hGAaf+cxnuPnmm4uex1I/O5LJJGC1ppqmySOPPMILL7xAfX09X/jCF0ryuqwljc388phPY7NyxqbjikMiIiIiIiIiIlI8jmorExERERERERGR4lJxSERERERERESkiqk4JCIiIiIiIiJSxVQcEhERERERERGpYioOiYiIiIiIiIhUMRWHRERERERERESqmIpDIiIiIiIiIiJVTMUhEREREREREZEq9v8DA0tlLSGXWH4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x360 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def hyperopt_model_score_svm(params):\n",
    "    X_ = X[:]\n",
    "\n",
    "    if 'normalize' in params:\n",
    "        if params['normalize'] == 1:\n",
    "            X_ = normalize(X_)\n",
    "        del params['normalize']\n",
    "\n",
    "    if 'scale' in params:\n",
    "        if params['scale'] == 1:\n",
    "            X_ = scale(X_)\n",
    "        del params['scale']\n",
    "\n",
    "    clf = SVC(**params)\n",
    "    return cross_val_score(clf, X_, y).mean()\n",
    "\n",
    "\n",
    "space_svm = {\n",
    "    'C': hp.uniform('C', 0, 20),\n",
    "    'kernel': hp.choice('kernel', ['linear', 'sigmoid', 'poly', 'rbf']),\n",
    "    'gamma': hp.uniform('gamma', 0, 20),\n",
    "    'scale': hp.choice('scale', [0, 1]),\n",
    "    'normalize': hp.choice('normalize', [0, 1])\n",
    "}\n",
    "\n",
    "\n",
    "def f_svm(params):\n",
    "    acc = hyperopt_model_score_svm(params)\n",
    "    return -acc\n",
    "\n",
    "\n",
    "trials = Trials()\n",
    "best = fmin(f_svm, space_svm, algo=tpe.suggest, max_evals=1000, trials=trials)\n",
    "print('best:')\n",
    "print(best)\n",
    "\n",
    "parameters = ['C', 'kernel', 'gamma', 'scale', 'normalize']\n",
    "cols = len(parameters)\n",
    "f, axes = plt.subplots(nrows=1, ncols=cols, figsize=(20, 5))\n",
    "cmap = plt.cm.jet\n",
    "for i, val in enumerate(parameters):\n",
    "    xs = np.array([t['misc']['vals'][val] for t in trials.trials]).ravel()\n",
    "    ys = [-t['result']['loss'] for t in trials.trials]\n",
    "    axes[i].scatter(\n",
    "        xs,\n",
    "        ys,\n",
    "        s=20,\n",
    "        linewidth=0.01,\n",
    "        alpha=0.25,\n",
    "        c=cmap(float(i) / len(parameters)))\n",
    "    axes[i].set_title(val)\n",
    "    axes[i].set_ylim([0.9, 1.0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:09:42.371153Z",
     "start_time": "2018-12-19T08:09:42.174044Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9643956205831742\n"
     ]
    }
   ],
   "source": [
    "params = {'C': 3.383042170158757, 'gamma': 2.4082659264264454, 'kernel': \"poly\"}\n",
    "clf = SVC(**params)\n",
    "print(cross_val_score(clf, normalize(X), y).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "### 将一切融合为一体\n",
    "\n",
    "将一切融合为一体，也就是说将模型本身也作为超参数进行优化，返回的结果将是最好的那个模型以及其最佳参数组合。但是这样做存在一个问题。例子如下。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:46:47.173438Z",
     "start_time": "2018-12-19T07:39:41.799253Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1797, 64) (1797,)\n",
      "new best: 0.9437997276286755 using svm\n",
      "iters: 1 , acc: 0.9437997276286755 using {'C': 9.103691443113167, 'gamma': 16.473379775097474, 'kernel': 'linear', 'type': 'svm'}\n",
      "new best: 0.9438221642590143 using knn\n",
      "iters: 4 , acc: 0.9438221642590143 using {'n_neighbors': 21, 'type': 'knn'}\n",
      "new best: 0.9644039680147021 using knn\n",
      "iters: 14 , acc: 0.9644039680147021 using {'n_neighbors': 4, 'type': 'knn'}\n",
      "iters: 50 , acc: 0.4696816789034243 using {'criterion': 'gini', 'max_depth': 6, 'max_features': 1, 'type': 'dtree'}\n",
      "new best: 0.968293886616605 using knn\n",
      "iters: 92 , acc: 0.968293886616605 using {'n_neighbors': 3, 'type': 'knn'}\n",
      "iters: 100 , acc: 0.968293886616605 using {'n_neighbors': 3, 'type': 'knn'}\n",
      "iters: 150 , acc: 0.928771856885554 using {'n_neighbors': 39, 'type': 'knn'}\n",
      "iters: 200 , acc: 0.6162381887566258 using {'criterion': 'entropy', 'max_depth': 12, 'max_features': 1, 'type': 'dtree'}\n",
      "iters: 250 , acc: 0.8241514006071918 using {'alpha': 1.1302495129317371, 'type': 'naive_bayes'}\n",
      "iters: 300 , acc: 0.9493786750179943 using {'n_neighbors': 14, 'type': 'knn'}\n",
      "iters: 350 , acc: 0.9560677594549536 using {'n_neighbors': 9, 'type': 'knn'}\n",
      "iters: 400 , acc: 0.5237318439952089 using {'criterion': 'gini', 'max_depth': 6, 'max_features': 2, 'type': 'dtree'}\n",
      "iters: 450 , acc: 0.968293886616605 using {'n_neighbors': 3, 'type': 'knn'}\n",
      "iters: 500 , acc: 0.9410369480336125 using {'n_neighbors': 23, 'type': 'knn'}\n",
      "iters: 550 , acc: 0.9404776918351127 using {'n_neighbors': 25, 'type': 'knn'}\n",
      "iters: 600 , acc: 0.9265458689408209 using {'n_neighbors': 42, 'type': 'knn'}\n",
      "iters: 650 , acc: 0.9215402390309818 using {'n_neighbors': 45, 'type': 'knn'}\n",
      "iters: 700 , acc: 0.9437997276286755 using {'C': 8.307346790972709, 'gamma': 14.31613674780396, 'kernel': 'linear', 'type': 'svm'}\n",
      "iters: 750 , acc: 0.9387859177942958 using {'n_neighbors': 27, 'type': 'knn'}\n",
      "iters: 800 , acc: 0.9215402390309818 using {'n_neighbors': 45, 'type': 'knn'}\n",
      "iters: 850 , acc: 0.9437997276286755 using {'C': 0.803748055109546, 'gamma': 13.091257036777954, 'kernel': 'linear', 'type': 'svm'}\n",
      "iters: 900 , acc: 0.927105153057152 using {'n_neighbors': 41, 'type': 'knn'}\n",
      "iters: 950 , acc: 0.951042605675164 using {'n_neighbors': 13, 'type': 'knn'}\n",
      "iters: 1000 , acc: 0.9371108386165347 using {'n_neighbors': 29, 'type': 'knn'}\n",
      "iters: 1050 , acc: 0.9465990330528881 using {'n_neighbors': 19, 'type': 'knn'}\n",
      "iters: 1100 , acc: 0.1012788128613552 using {'C': 2.811062086826674, 'gamma': 15.682420324900988, 'kernel': 'rbf', 'type': 'svm'}\n",
      "iters: 1150 , acc: 0.968293886616605 using {'n_neighbors': 3, 'type': 'knn'}\n",
      "iters: 1200 , acc: 0.8202448429778956 using {'alpha': 1.945569326498969, 'type': 'naive_bayes'}\n",
      "iters: 1250 , acc: 0.9332042809872384 using {'n_neighbors': 33, 'type': 'knn'}\n",
      "iters: 1300 , acc: 0.968293886616605 using {'n_neighbors': 3, 'type': 'knn'}\n",
      "iters: 1350 , acc: 0.9438138168274864 using {'n_neighbors': 22, 'type': 'knn'}\n",
      "iters: 1400 , acc: 0.9437997276286755 using {'C': 9.27573146818064, 'gamma': 17.45431916873462, 'kernel': 'linear', 'type': 'svm'}\n",
      "iters: 1450 , acc: 0.42834011383005555 using {'criterion': 'entropy', 'max_depth': 5, 'max_features': 1, 'type': 'dtree'}\n",
      "iters: 1500 , acc: 0.10183809697768631 using {'C': 1.2560544954464077, 'gamma': 9.055318830818816, 'kernel': 'rbf', 'type': 'svm'}\n",
      "best:\n",
      "{'classifier_type': 3, 'knn_n_neighbors': 2}\n"
     ]
    }
   ],
   "source": [
    "digits = datasets.load_digits()\n",
    "X = digits.data\n",
    "y = digits.target\n",
    "print(X.shape, y.shape)\n",
    "\n",
    "\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.naive_bayes import BernoulliNB\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "def hyperopt_train_test(params):\n",
    "    t = params['type']\n",
    "    del params['type']\n",
    "    if t == 'naive_bayes':\n",
    "        clf = BernoulliNB(**params)\n",
    "    elif t == 'svm':\n",
    "        clf = SVC(**params)\n",
    "    elif t == 'dtree':\n",
    "        clf = DecisionTreeClassifier(**params)\n",
    "    elif t == 'knn':\n",
    "        clf = KNeighborsClassifier(**params)\n",
    "    else:\n",
    "        return 0\n",
    "    return cross_val_score(clf, X, y).mean()\n",
    "\n",
    "space = hp.choice('classifier_type', [\n",
    "    {\n",
    "        'type': 'naive_bayes',\n",
    "        'alpha': hp.uniform('alpha', 0.0, 2.0)\n",
    "    },\n",
    "    {\n",
    "        'type': 'svm',\n",
    "        'C': hp.uniform('C', 0, 10.0),\n",
    "        'kernel': hp.choice('kernel', ['linear', 'rbf']),\n",
    "        'gamma': hp.uniform('gamma', 0, 20.0)\n",
    "    },\n",
    "    {\n",
    "        'type': 'dtree',\n",
    "        'max_depth': hp.choice('max_depth', range(1, 20)),\n",
    "        'max_features': hp.choice('max_features', range(1, 5)),\n",
    "        'criterion': hp.choice('criterion', [\"gini\", \"entropy\"]),\n",
    "    },\n",
    "    {\n",
    "        'type': 'knn',\n",
    "        'n_neighbors': hp.choice('knn_n_neighbors', range(1,50))\n",
    "    }\n",
    "])\n",
    "\n",
    "count = 0\n",
    "best = 0\n",
    "def f(params):\n",
    "    global best, count\n",
    "    count += 1\n",
    "    acc = hyperopt_train_test(params.copy())\n",
    "    if acc > best:\n",
    "        print('new best:', acc, 'using', params['type'])\n",
    "        print('iters:', count, ', acc:', acc, 'using', params)\n",
    "        best = acc\n",
    "    if count % 50 == 0:\n",
    "        print('iters:', count, ', acc:', acc, 'using', params)\n",
    "    return -acc\n",
    "\n",
    "trials = Trials()\n",
    "best = fmin(f, space, algo=tpe.suggest, max_evals=1500, trials=trials)\n",
    "print('best:')\n",
    "print(best)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "在这次测试中，我们明显的看到了一个问题。因为我们给出的不同模型的参数空间很宽泛，所以也就很可能会出现单个模型的初始的随机搜索效果会很差。而因为Hyperopt自身的运行机制，其之后的注意力很有可能更多的放在第一个获得较好优化结果的模型上，而这样很有可能会错过真正的最佳模型。那么有什么办法可以解决这个问题吗？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T07:48:18.361558Z",
     "start_time": "2018-12-19T07:48:18.084751Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score 0.968293886616605\n"
     ]
    }
   ],
   "source": [
    "params = {'n_neighbors': 3}\n",
    "clf = KNeighborsClassifier(**params)\n",
    "print(\"best score\",cross_val_score(clf, X, y).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T01:36:24.176429Z",
     "start_time": "2018-12-19T01:36:24.165540Z"
    }
   },
   "source": [
    "## 选择搜索算法\n",
    "\n",
    "之前我们选择的优化参数都是tpe。这是一种带有启发性的搜索算法。类似于遗传算法，粒子群算法。有时候算法可能在一开始就陷入局部最优的区域之中。一种比较好的解决方案就是选择其他搜索函数-随机搜索。但是也正是因为随机搜索缺乏启发性，所以随机搜索想要获得较好的结果也往往需要更多的搜索次数，因此上搜索算法的具体使用，请按照实际情况选择。\n",
    "\n",
    "随机搜索：`algo=hyperopt.random.suggest`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:12:21.292358Z",
     "start_time": "2018-12-19T08:12:16.200196Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best:\n",
      "{'criterion': 1, 'max_depth': 8, 'max_features': 1, 'normalize': 1, 'scale': 0}\n"
     ]
    }
   ],
   "source": [
    "def fn_dtree(params):\n",
    "    acc = hyperopt_model_score_dtree(params)\n",
    "    return -acc\n",
    "\n",
    "# 为可视化做准备\n",
    "trials = Trials()\n",
    "from hyperopt import rand\n",
    "best = fmin(\n",
    "    fn=fn_dtree, space=space_dtree, algo=rand.suggest, max_evals=1000, trials=trials)\n",
    "print('best:')\n",
    "print(best)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-19T08:13:44.634631Z",
     "start_time": "2018-12-19T08:13:44.624342Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9268790849673203\n"
     ]
    }
   ],
   "source": [
    "params = {'criterion': \"entropy\", 'max_depth': 9, 'max_features': 2}\n",
    "clf = DecisionTreeClassifier(**params)\n",
    "print(cross_val_score(clf, normalize(X), y).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 更多的内容请参考:\n",
    "\n",
    "1. [hyperopt中文文档-Github,所有教程源码都会上传到github中](https://github.com/FontTian/hyperopt-doc-zh/wiki)\n",
    "1. [Hyperopt中文文档导读-CSDN](https://blog.csdn.net/FontThrone/column/info/31482)\n",
    "1. [Hyperopt原文档](https://github.com/hyperopt/hyperopt/wiki)\n",
    "\n",
    "编写本篇教程中，参考了该文章，对于原文章和翻译，我十分感谢。（但是除了感谢坏话也还是要说的，这篇文章代码问题很多，不完整，错误很多，部分细节也不是很好）\n",
    "1. [Parameter Tuning with Hyperopt](https://districtdatalabs.silvrback.com/parameter-tuning-with-hyperopt)\n",
    "2. [使用 Hyperopt 进行参数调优(译）-简书](https://www.jianshu.com/p/35eed1567463)\n",
    "    \n",
    "其他教程：\n",
    "1. [如何使用hyperopt对xgboost进行自动调参](https://blog.csdn.net/FontThrone/article/details/85045254)\n",
    "2. [在Hyperopt框架下使用XGboost与交叉验证](https://blog.csdn.net/FontThrone/article/details/85045539)\n",
    "1. [Lightgbm with Hyperopt](https://blog.csdn.net/FontThrone/article/details/85063218)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
